---
title: 合并与冲突解决
---

## 合并分支
```bash
git merge 分支名
```
- 将指定分支合并到当前分支。
- 合并后如有冲突需手动解决。

## 解决冲突流程
1. 编辑有冲突的文件，手动处理冲突标记（`<<<<<<<`、`=======`、`>>>>>>>`）。
2. 标记为已解决：
```bash
git add 冲突文件
```
- 将已解决的文件加入暂存区。
3. 完成合并：
```bash
git commit
```
- 提交合并结果。

## 查看冲突文件
```bash
git status
```
- 显示当前冲突文件。

## 放弃合并
```bash
git merge --abort
```
- 放弃本次合并，回到合并前状态。

## 手动解决冲突建议
- 使用图形化工具（如 VSCode、Sourcetree）辅助解决冲突。
- 合并前建议先拉取远程分支，减少冲突概率。

## Git 非 fast-forward 推送被拒绝的解决方案
当你在本地通过 `git reset --hard` 回退了提交，但远程仓库仍保留这些提交时，直接 `git push` 会被拒绝，提示非 fast-forward 错误。这是因为你本地的历史“倒退”了，远程仓库为了保护历史不会自动覆盖。

### 解决思路
- 如果你**确定远程多余的提交不需要**，可以强制推送覆盖远程。
- 如果你**需要保留远程的提交历史**，应先拉取并合并远程提交，再推送。

### 方案一：强制覆盖远程（丢弃远程多余的 commit）
适用于个人项目或确定远程提交无用的场景。

```bash
git push origin main --force
```

> ⚠️ 注意：强制推送会让远程分支完全回到你本地的状态，抹掉远程多余的提交。团队协作时需谨慎，避免影响他人。

### 方案二：保留远程提交（合并）
适用于团队协作或需保留远程历史的场景。

```bash
git pull origin main --rebase
git push origin main
```

这样会把你本地的新提交“接到”远程最新提交之后，不会丢失远程已有的提交。

### 安全建议
- 操作前建议先备份当前分支，防止误操作：

```bash
git branch backup-$(date +%Y%m%d)
```

- 团队协作时，优先选择合并方案，避免强推。
- 若必须强推，提前与团队成员沟通。

### 总结
- 个人项目可用 `--force` 强推。
- 团队项目优先 `pull --rebase` 合并。
- 重要分支操作前做好备份。